package cn.com.bluemoon.daps.standard.common.report;

import cn.com.bluemoon.daps.model.dto.ModelDto;
import cn.com.bluemoon.daps.standard.entity.DapAuditSystemResult;
import cn.com.bluemoon.daps.common.enums.AuditCheckType;
import cn.hutool.core.util.NumberUtil;

/**
 * 抽象报告检查类
 *
 * @author Jarod.Kong
 * @date 2020/9/25 16:21
 */
@FunctionalInterface
public interface IReportCheck {

    /**
     * @param errorFields 错误数
     * @param fieldTotal  总数
     * @return 错误率 <em>带%</em>
     */
    default String formatPercent(int errorFields, int fieldTotal, int scale) {
        /**
         * 数字格式化
         */
        int scalaDefaultValue = 2;
        double i = ((double) errorFields / (double) fieldTotal);
        //noinspection AliControlFlowStatementWithoutBraces
        if (scale < 0) {
            scale = scalaDefaultValue;
        }
        String value = NumberUtil.formatPercent(i, scale);
        return value;
    }

    default String formatPercent(int errorFields, int fieldTotal) {
       return formatPercent(errorFields, fieldTotal, -1);
    }

    boolean generate(ModelDto modelDto);

    /**
     * 提供给生成主报告页面的方法 人口
     *
     * @param sysAuditChineseResultId 稽核id {@link DapAuditSystemResult#getId()}
     * @param auditSystemResultId
     * @param systemId                系统id
     * @param checkType               稽核类型 {@link DapAuditSystemResult#getCheckType()}
     * @return b
     */
    default boolean generateMainReport(String sysAuditResultMainId,String systemId, String sysAuditCheckResultId, AuditCheckType checkType) {
        ModelDto modelDto = new ModelDto();
        modelDto.setCheckType(checkType);
        modelDto.setSystemId(systemId);
        modelDto.setSysAuditCheckResultId(sysAuditCheckResultId);
        modelDto.setSysAuditMainResultId(sysAuditResultMainId);
        return generate(modelDto);
    }
}